package old.day20190320.pool;

/**
 * @author DingZhenYun
 * @create 2019-03-21 10:03
 */

import org.apache.commons.dbcp.BasicDataSource;

import java.sql.Connection;
import java.sql.SQLException;

/**
 * 使用 DBCP 数据库连接池
 * 1. 加入 jar 包(2 个jar 包). 依赖于 Commons Pool
 * 2. 创建数据库连接池
 * 3. 为数据源实例指定必须的属性
 * 4. 从数据源中获取数据库连接
 */
public class TestDemo1 {
    public static void main(String[] args) throws SQLException {
        testDBCP();
    }

    private static void testDBCP() throws SQLException {
        final  BasicDataSource dataSource=new BasicDataSource();
        //创建DBCP数据源

        //2为数据源实例指定属
        ((BasicDataSource) dataSource).setUsername("root");
        ((BasicDataSource) dataSource).setUrl("jdbc:mysql://localhost:3307/zhihu");
        ((BasicDataSource) dataSource).setPassword("123456");
        ((BasicDataSource) dataSource).setDriverClassName("com.mysql.jdbc.Driver");
        //3. 指定数据源的一些可选的属性.
        //1). 指定数据库连接池中初始化连接数的个数
        ((BasicDataSource) dataSource).setInitialSize(5);
        //2). 指定最大的连接数: 同一时刻可以同时向数据库申请的连接数
        ((BasicDataSource) dataSource).setMaxActive(5);

        //3). 指定小连接数: 在数据库连接池中保存的最少的空闲连接的数量
        ((BasicDataSource) dataSource).setMinIdle(2);

        //4).等待数据库连接池分配连接的最长时间. 单位为毫秒. 超出该时间将抛出异常.
        ((BasicDataSource) dataSource).setMaxWait(1000 * 5);
        //从数据源中获取数据库连接
        Connection connection=dataSource.getConnection();
        System.out.println(connection.getClass());

         connection=dataSource.getConnection();
        System.out.println(connection.getClass());

         connection=dataSource.getConnection();
        System.out.println(connection.getClass());

         connection=dataSource.getConnection();
        System.out.println(connection.getClass());

       Connection connection2=dataSource.getConnection();
        System.out.println("+___+"+connection.getClass());
        new Thread(){
            @Override
            public void run() {
                Connection conn;
                try{
                    conn=dataSource.getConnection();
                    System.out.println(conn.getClass());
                }catch (Exception e){
                    e.printStackTrace();
                }
            };
        }.start();
        try{
            Thread.sleep(6600);
        }catch (Exception e){
            e.printStackTrace();
        }
        connection2.close();
    }
}
